package com.barcode.client.android.result.supplement;

import java.io.IOException;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.content.Context;
import android.os.Handler;
import android.text.Html;
import android.widget.TextView;

import com.barcode.client.android.HttpHelper;
import com.barcode.client.android.LocaleManager;
import com.barcode.client.android.history.HistoryManager;
import com.fit.demo.R;

final class ProductResultInfoRetriever extends SupplementalInfoRetriever {

	private static final Pattern PRODUCT_NAME_PRICE_PATTERN = Pattern
			.compile("owb63p\">([^<]+).+zdi3pb\">([^<]+)");

	private final String productID;
	private final String source;
	private final Context context;

	ProductResultInfoRetriever(TextView textView, String productID,
			Handler handler, HistoryManager historyManager, Context context) {
		super(textView, handler, historyManager);
		this.productID = productID;
		this.source = context.getString(R.string.msg_google_product);
		this.context = context;
	}

	@Override
	void retrieveSupplementalInfo() throws IOException, InterruptedException {

		String encodedProductID = URLEncoder.encode(productID, "UTF-8");
		String uri = "http://www.google."
				+ LocaleManager.getProductSearchCountryTLD(context)
				+ "/m/products?ie=utf8&oe=utf8&scoring=p&source=zxing&q="
				+ encodedProductID;
		String content = HttpHelper.downloadViaHttp(uri,
				HttpHelper.ContentType.HTML);

		Matcher matcher = PRODUCT_NAME_PRICE_PATTERN.matcher(content);
		if (matcher.find()) {
			append(productID, source,
					new String[] { unescapeHTML(matcher.group(1)),
							unescapeHTML(matcher.group(2)) }, uri);
		}
	}

	private static String unescapeHTML(String raw) {
		return Html.fromHtml(raw).toString();
	}

}
